package com.ysh.dao.impl;

import com.ysh.dao.StudentDao;
import com.ysh.domain.Student;
import com.ysh.utils.JDBCUtils;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

/*
    student操作数据库操作

 */
public class StudentDaoImpl implements StudentDao {
    private Connection con = null;
    private PreparedStatement pstmt = null;
    private ResultSet rs = null;
    private String sql = null;
    /*
        查询所有学生信息
     */
    @Override
    public ArrayList<Student> findAll() {
        // 创建集合，存储Student对象
        ArrayList<Student> list = new ArrayList<>();
        try {

            con = JDBCUtils.getConnection();

            // 获取执行者对象
            // 定义sql语句，执行sql语句，获取结果集
            sql = "SELECT * FROM student";
            pstmt = con.prepareStatement(sql);
            // 执行查询操作
            rs = pstmt.executeQuery(sql);
            // 处理结果集
            while (rs.next()) {
                int sid = rs.getInt("sid");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
                // 封装成Student对象
                Student stu = new Student(sid, name, age, birthday);
                // 封装好的Student对象存入集合
                list.add(stu);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.close(con, pstmt, rs);
        }
        // 返回list集合
        return list;
    }

    /*
        根据id查询学生信息
     */
    @Override
    public Student findById(Integer id) {
        // 创建集合，存储Student对象
        Student stu = new Student();

        try {

            con = JDBCUtils.getConnection();

            // 定义sql语句，执行预编译sql语句，设置值
            String sql = "SELECT * FROM student WHERE sid=?";
            // 获取执行者对象，预编译sql语句
            pstmt = con.prepareStatement(sql);
            // 设置值
            pstmt.setInt(1, id);

            // 执行指定id值查询语句
            rs = pstmt.executeQuery();

            // 处理结果集
            while (rs.next()) {
                int sid = rs.getInt("sid");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
                // 赋值
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.close(con, pstmt, rs);
        }
        // 返回list集合
        return stu;
    }

    /*
        新增学生信息
     */
    @Override
    public int insert(Student stu) {
        // 连接对象
        int result = 0;

        try {
            con = JDBCUtils.getConnection();

            // 获取执行者对象
            // 定义sql语句，并且接收返回的结果集
            // 处理日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(stu.getBirthday());

            // 定义sql语句
            String sql = "INSERT INTO student VALUES(NULL,?,?,?)";
            // 预编译sql语句，初始化pstmt对象
            pstmt = con.prepareStatement(sql);
            // 占位符赋值
            pstmt.setString(1, stu.getName());
            pstmt.setInt(2, stu.getAge());
            pstmt.setString(3, birthday);
            // 执行sql语句
            result = pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.close(con, pstmt);
        }
        // 返回list集合
        return result;
    }

    /*
        修改学生信息
     */
    @Override
    public int update(Student stu) {
        // 连接对象
        int result = 0;

        try {

            con = JDBCUtils.getConnection();

            // 定义sql语句
            String sql = "UPDATE student SET NAME=?,age=?,birthday=? where sid=?";
            // 预编译sql语句，获取pstmt对象
            pstmt = con.prepareStatement(sql);
            // 设置值
            pstmt.setString(1, stu.getName());
            pstmt.setInt(2, stu.getAge());
            // 处理日期,转换为字符串
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(stu.getBirthday());
            pstmt.setString(3, birthday);
            pstmt.setInt(4, stu.getSid());

            // 获取更新操作
            result = pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.close(con, pstmt);
        }
        // 返回list集合
        return result;
    }

    /*
        删除学生信息
     */
    @Override
    public int delete(Integer id) {
        // 连接对象
        int result = 0;

        try {
            con = JDBCUtils.getConnection();

            // 定义sql语句
            String sql = "DELETE FROM student WHERE sid=?";
            // 预编译，初始化PreparedStatement对象
            pstmt = con.prepareStatement(sql);
            // 赋值
            pstmt.setInt(1,id);

            // 执行删除操作
            result = pstmt.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.close(con, pstmt);
        }
        // 返回list集合
        return result;
    }
}
